package com.bls.lib.mvp.model;

import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.HttpParams;

/**
 * 　　  () 　　　  ()
 * 　　  ( ) 　　　( )
 * 　　  ( ) 　　　( )
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　┻　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ——————————————————
 * Created by BinglingSu on 2017/8/23.
 */

public class MvpOkGoImpl {

    private volatile static MvpOkGoImpl instance = null;

    public static MvpOkGoImpl getInstance() {
        if (instance == null) {
            synchronized (MvpOkGoImpl.class) {
                if (instance == null) {
                    instance = new MvpOkGoImpl();
                }
            }
        }
        return instance;
    }

    /**
     * 请求网络数据
     *
     * @param url            接口地址
     * @param httpParams     请求参数
     * @param cacheType      缓存类型
     *                       0:按照HTTP协议的默认缓存规则，例如有304响应头时缓存
     *                       1:不使用缓存
     *                       2:请求网络失败后，读取缓存
     *                       3:如果缓存不存在才请求网络，否则使用缓存
     *                       4:先使用缓存，不管是否存在，仍然请求网络
     *                       其他数值：不使用缓存
     * @param stringCallback String类型返回值
     */
    public void getStringData(String url, HttpParams httpParams, int cacheType, StringCallback stringCallback) {
        CacheMode cacheMode;
        switch (cacheType) {
            case 0:
                cacheMode = CacheMode.DEFAULT;
                break;
            case 1:
                cacheMode = CacheMode.NO_CACHE;
                break;
            case 2:
                cacheMode = CacheMode.REQUEST_FAILED_READ_CACHE;
                break;
            case 3:
                cacheMode = CacheMode.IF_NONE_CACHE_REQUEST;
                break;
            case 4:
                cacheMode = CacheMode.FIRST_CACHE_THEN_REQUEST;
                break;
            default:
                cacheMode = CacheMode.NO_CACHE;
        }
        String cacheKey;
        if (httpParams == null) {
            cacheKey = url;
        } else {
            cacheKey = url.concat(httpParams.toString());
        }
        OkGo.<String>get(url).tag(url).cacheKey(cacheKey).cacheMode(cacheMode).params(httpParams).execute(stringCallback);
    }
}
